import java.util.Arrays;
import java.util.Scanner;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        oldEven(5);
    }

    /*
    异或来求出现两次的元素
     */
    public static int findTimes(int[] arr) {
        int ret = 0;
        for (int i = 0; i < arr.length; i++) {
            ret ^= arr[i];
            //异或运算是符合交换律的，所以这里最后的异或结果就是只出现一次的数字
        }
        return ret;
    }

    /*
    多数元素：
    给定一个大小为 n 的数组，找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
    你可以假设数组是非空的，并且给定的数组总是存在多数元素。
    示例 1：
    输入：[3,2,3]
    输出：3
    示例 2：
    输入：[2,2,1,1,1,2,2]
    输出：2
     */
    //思路一：排序后找中间数，中间的数必然是占一半以上的元素
    public static int findNums(int[] arr) {
        Arrays.sort(arr);
        return arr[arr.length / 2];
    }

    //摩尔投票法
    public static int Moore(int[] arr) {
        int ret = arr[0];
        int count = 1;
        for (int i = 0; i < arr.length; i++) {
            if (count >= 0) {
                if (arr[i] == ret) {
                    count++;
                } else {
                    count--;
                }
            } else {
                ret = arr[i];
                count = 1;
            }
        }
        return ret;
    }

    /*
    实现数组转化成字符串
     */
    public static String myToString(int[] arr) {
        //注意：当数组是null时，若取长度会发生空指针异常
        if (arr == null) {
            return "null";
        }
        if (arr.length == 0) {
            return "[]";
        }
        String ret = "[";
        for (int i = 0; i < arr.length; i++) {
            ret += arr[i];
            if (i < arr.length - 1) {
                ret += ", ";
            } else {
                ret += "]";
            }
        }

        return ret;
    }

    /*
    冒泡排序
     */
    public static void Bubble(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            //设置flg变量，检测数组是否在某次排序后已变成顺序，简化程序
            boolean flg = false;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    flg = true;
                }
            }
            if (flg == false) {
                break;
            }
        }
    }

    /*
    猜数字
     */
    public static void guessNum() {
        //生成随机数
        Random random = new Random();
        int ranNum = random.nextInt(0, 100);
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入你所猜的数字：");
            int num = scanner.nextInt();
            if (num > ranNum) {
                System.out.println("猜大了");
            } else if (num < ranNum) {
                System.out.println("猜小了");
            } else {
                System.out.println("猜对了，游戏结束");
                break;
            }
        }
        scanner.close();
    }

    /*
    获取一个数二进制序列中所有的偶数位和奇数位，分别输出二进制序列
     */
    public static void oldEven(int num) {
        for (int i = 31; i >= 0; i -= 2) {
            System.out.print((num >> i) & 1);
        }
        System.out.println();
        for (int i = 30; i >= 0; i -= 2) {
            System.out.print((num >> i) & 1);
        }
    }
}